package Day18_网络编程.demo2_TCP通信程序.案例_互发;

import java.io.InputStream;
import java.io.OutputStream;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.Scanner;

/**
 * @author zhangyan
 * @date 2020/5/10 11:12
 */
public class Server {
    public static void main(String[] args) throws Exception {

        /**
         类 main()  运行服务端程序就是服务端
            TCP服务器端代码实现步骤
                 1.创建ServerSocket对象并指定端口号(相当于开启了一个服务器)
                 2.调用ServerSocket对象的accept方法等待客端户连接并获得对应Socket对象
                 3.调用Socket对象的getInputStream方法获得字节输入流对象
                 4.调用字节输入流对象的read方法读取客户端发送的数据
         -------------------开始回写信息------------------------------
                 5.调用Socket对象获得字节输出流对,关联连接通道
                 6.调用字节输出流对象的write方法写数据到连接通道
                 7.关闭Socket和ServerSocket对象
         */

        //1.创建服务端ServerSocket对象,并指定端口号
        ServerSocket ss = new ServerSocket(666);

        //2.使用ServerSocket对象accept方法 等待客户端连接
        //如果连接不成功,会一直阻塞
        //如果连接成功会返回一个Socket对象
        Socket socket = ss.accept(); //阻塞状态

        while (true) {
            //3.使用返回的Socket对象获取字节输入流,关联连接通道
            InputStream is = socket.getInputStream();

            //4.使用字节输入流读取数据
            byte[] bytes = new byte[8192];
            int len = is.read(bytes);
            System.out.println("客户端发过来的信息:" + new String(bytes, 0, len));

            //5.调用Socket对象获得字节输出流对,关联连接通道
            OutputStream os = socket.getOutputStream();

            //6.调用字节输出流对象的write方法写数据到连接通道
            Scanner sc = new Scanner(System.in);
            System.out.println("输入回发到客户端的消息:");
            String massage = sc.nextLine();
            os.write(massage.getBytes());
        }

        //7.关闭Socket对象 ServerSocket一般不关闭
        //socket.close();
    }
}
